package leetcode.linked;

import common.ListNode;

/**
 * 旋转链表(给你一个链表的头节点 head ，旋转链表，将链表每个节点向右移动 k 个位置。)
 *
 * @author WangChenyu
 * @since 2024-04-16 10:45
 */
public class RotateRight {
    public static ListNode rotateRight(ListNode head, int k) {
        if (head == null || k <= 0 || head.next == null) {
            return head;
        }
        // 记录链表的长度
        ListNode tmp = head;
        int n = 1;
        while (tmp.next != null) {
            tmp = tmp.next;
            n++;
        }
        // 获取需要旋转的元素数量
        int i = n - (k % n);
        // 链表形成环形链表
        tmp.next = head;
        // 改变变量的指向位置
        while (i-- > 0) {
            tmp = tmp.next;
        }
        // 定义一个变量存储链表
        ListNode rst = tmp.next;
        tmp.next = null;
        return rst;
    }

    public static void main(String[] args) {
        ListNode node0 = new ListNode(0, null);
        ListNode node1 = new ListNode(1, node0);
        ListNode node2 = new ListNode(2, node1);
        ListNode node3 = new ListNode(3, node2);
        ListNode node4 = new ListNode(4, node3);
        ListNode node5 = new ListNode(5, node4);
        ListNode node6 = new ListNode(6, node5);
        ListNode node7 = new ListNode(7, node6);
        System.out.println(rotateRight(node7, 1));
    }
}
